package com.tdam2011.grupo04;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;

import com.tdam2011.grupo04.HistorialMail.EmailAdapter.Holder;
import com.tdam2011.grupo04.entidades.Contacto;
import com.tdam2011.grupo04.entidades.Mensaje;

import android.app.ListActivity;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

public class HistorialMensajes extends ListActivity implements
	OnItemClickListener{
	
	private ImageButton img_nuevo_sms;
	private TextView txt_nuevo_sms;

	private MensajeAgendaAdapter adapter;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
	        super.onCreate(savedInstanceState);
	        setContentView(R.layout.historiales);
	        
	        img_nuevo_sms= (ImageButton)findViewById(R.id.img_nuevo_mensaje);
	        txt_nuevo_sms= (TextView)findViewById(R.id.txt_nuevo_mensaje);
		    
		    img_nuevo_sms.setBackgroundResource(R.drawable.nuevo_mensaje);
		    txt_nuevo_sms.setText("Nuevo Mensaje");
	        
	        //Preparamos la lista de contactos
	        this.adapter= new MensajeAgendaAdapter();
	        this.setListAdapter(adapter);
	        
	        //Cargamos datos en la agenda de contactos
	        cargarSMS();
	        
	        this.getListView().setOnItemClickListener(this);
	}
	
	public void nuevoMensaje(View v){
		Intent intent= new Intent(HistorialMensajes.this, com.tdam2011.grupo04.Mensaje.class);
		startActivityForResult(intent, 1);
	}
	
	@Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
		MenuInflater inflater = getMenuInflater();
	    inflater.inflate(R.menu.histmensajes_menu, menu);
	    return true;
    }
	
	public boolean onOptionsItemSelected(MenuItem item){
		if(item.getTitle().equals("Nuevo Mensaje")){
			Intent intent= new Intent(this.getApplicationContext(), Mensaje.class);
			startActivityForResult(intent, 0);
		}
    	super.onOptionsItemSelected(item);
    	return false;
    }

	private void cargarSMS(){
		String columns[] = new String[] { "_id", "person", "address", "body", "status", "thread_id", "date"};
		String url = "content://sms/"; 
		Uri uri = Uri.parse(url); 
		 
		Cursor cur = managedQuery(uri, 
		columns, // Which columns to return
		null, // WHERE clause; which rows to return(all rows)
		null, // WHERE clause selection arguments (none)
		null); // Order-by clause (ascending by name)

		Mensaje mensaje= null;
		while(cur.moveToNext()){
			mensaje= new Mensaje();
			mensaje.setId(cur.getInt(0));
			mensaje.setThreadId(cur.getInt(5));
			
			Contacto contacto= obtenerContacto(cur.getInt(1));
			if(contacto != null)
				mensaje.setNombreContacto(contacto.getNombre());
			else
				mensaje.setNombreContacto("Yo");
			
			mensaje.setTelefonoContacto(cur.getInt(2));
			mensaje.setCuerpoMensaje(cur.getString(3));
			mensaje.setThreadId(cur.getInt(5));
			mensaje.setFechaEnvio(cur.getLong(6));
			adapter.addMensaje(mensaje);
		}
		cur.close();
		adapter.notifyDataSetChanged();
	}
	
	private Contacto obtenerContacto(int id){
		Contacto contacto= null;
		
		String condicion= "_ID = " + id;
		ContentResolver cr = getContentResolver();
		Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, 
				null, // Which columns to return
				condicion, // WHERE clause; which rows to return(all rows)
				null, // WHERE clause selection arguments (none)
				null); // Order-by clause (ascending by name)
		if(cur.moveToNext()){
			contacto= new Contacto();
			contacto.setNombre(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)));
			if(cur.getInt(cur.getColumnIndex(ContactsContract.Contacts.PHOTO_ID)) > 0){
				contacto.setTieneFoto(true);
				contacto.setFoto(String.valueOf(id));
			}
		}

		return contacto;
	}
	
	class MensajeAgendaAdapter extends BaseAdapter{
		private ArrayList<Mensaje> mensajes;
		private LayoutInflater inflater;

		public MensajeAgendaAdapter() {
			mensajes = new ArrayList<Mensaje>();
			inflater = LayoutInflater.from(HistorialMensajes.this);
		}

		public void addMensaje(Mensaje mensaje) {
			if (mensaje != null) {
				for(int i= 0; i< mensajes.size(); i++){
					if(mensajes.get(i).getThreadId() == mensaje.getThreadId()){
						mensaje.aumentarCantidad();
						this.mensajes.add(i, mensaje);
						return;
					}
				}
				this.mensajes.add(mensaje);
			}
		}
		
		public int getCount() {
			return mensajes.size();
		}
		
		public Object getItem(int position) {
			return mensajes.get(position);
		}

		public long getItemId(int position) {
			return position;
		}

		class Holder {
			private ImageView img_contacto;
			private TextView txt_nombreContacto;
			private TextView txt_fechaEnvio;
			private TextView txt_cuerpoMensaje;
		}

		public View getView(int position, View convertView, ViewGroup arg2){
			Holder holder;
			if (convertView == null) {
				convertView = inflater.inflate(R.layout.historiales_fila , null);
				holder = new Holder();
				holder.txt_nombreContacto = (TextView) convertView
						.findViewById(R.id.txt_nombreContacto);
				holder.txt_fechaEnvio = (TextView) convertView
						.findViewById(R.id.txt_fechaMensaje);
				holder.img_contacto = (ImageView) convertView
						.findViewById(R.id.img_contacto);
				holder.txt_cuerpoMensaje = (TextView) convertView
						.findViewById(R.id.txt_cuerpoMensaje);
				convertView.setTag(holder);
			} else {
				holder = (Holder) convertView.getTag();
			}

			Mensaje mensaje = (Mensaje) getItem(position);
			
			if(mensaje.getTieneFoto())
				holder.img_contacto.setImageURI(mensaje.getFoto());

			String fecha = millisToDate(mensaje.getFechaEnvio());

			holder.txt_nombreContacto.setText(String.valueOf(mensaje.getNombreContacto()));
			holder.txt_cuerpoMensaje.setText(mensaje.getCuerpoMensaje());
			holder.txt_fechaEnvio.setText(fecha);

			return convertView;
		}
	}

	@Override
	public void onItemClick(AdapterView<?> arg0, View arg1, int position,
			long arg3) {
		Mensaje mensaje= (Mensaje)adapter.getItem(position);
		if(!mensaje.getNombreContacto().equals("Yo")){
			Intent intent= new Intent(HistorialMensajes.this, com.tdam2011.grupo04.Mensaje.class);
			intent.putExtra("thread_id", mensaje.getThreadId());
			intent.putExtra("nroTelefono", mensaje.getTelefonoContacto());
			startActivityForResult(intent, 1);
		}
	}
	
	public static String millisToDate(long currentTime) {
	    String finalDate;
	    Calendar calendar = Calendar.getInstance();
	    calendar.setTimeInMillis(currentTime);
	    Date date = calendar.getTime();
	    finalDate = date.toString();
	    return finalDate;
	}

	@Override
	protected void onActivityResult(int resultCode, int requestCode, Intent data){
        super.onActivityResult(requestCode, resultCode, data);	
        if(resultCode == RESULT_OK){
        	Toast.makeText(this, "Mensaje enviado", Toast.LENGTH_SHORT);
        }
    }
}
